﻿// Date: 21.07.11

// Revision 4

// (21.07.11): Introduced the "ITransformable" interface on which every scene
//             objects (including lights) depend on. This simplifies the gizmo
//             processing and scene objects handling in general.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace NOVA.Scenery
{
    /// <summary>
    /// This interface is used as a base class for all scene objects
    /// </summary>
    public interface ITransformable
    {
        /// <summary>
        /// The current position of the object
        /// </summary>
        Vector3 Position { get; set; }

        /// <summary>
        /// The current orientation of the object
        /// </summary>
        Quaternion Orientation { get; set; }

        /// <summary>
        /// The current scale of the object
        /// </summary>
        Vector3 Scale { get; set; }

        /// <summary>
        /// The type of the object
        /// </summary>
        string Type { get; set; }

        /// <summary>
        /// The current bounding box of the object
        /// </summary>
        BoundingBox BoundingBox { get; }

        /// <summary>
        /// The current name of the object
        /// </summary>
        string Name { get; set; }

        /// <summary>
        /// The current controller matrix of the object
        /// </summary>
        Matrix ControllerMatrix { get; set; }

        /// <summary>
        /// Set if the object was added to a controller.
        /// </summary>
        bool HasController { get; set; }

        /// <summary>
        /// The unique ID of the scene object.
        /// </summary>
        int ID { get; }
    }
}
